久久―日本道色综合久久,亚洲欧美精品在线,狼狼色丁香久久婷婷综合五月,香蕉人人超,日本网站黄,国产在线观看不卡免费高清,无遮挡的毛片免费

2023信創(chuàng)獨(dú)角獸企業(yè)100強(qiáng)
全世界各行各業(yè)聯(lián)合起來(lái),internet一定要實(shí)現(xiàn)!

使用VB實(shí)現(xiàn)Excel自動(dòng)獲取外部數(shù)據(jù)

2004-02-20 eNet&Ciweek

  Excel面始之初帶有表格處理類(lèi)軟件中功能最強(qiáng)的宏語(yǔ)言,通過(guò)單擊“工具”菜單中的“宏”,選擇宏名來(lái)調(diào)用宏過(guò)程。隨后發(fā)展至Visual Basic for Application專(zhuān)用版,可制作按鈕、復(fù)選框、單選鈕等控件,賦控件以宏名,單擊控件運(yùn)行宏,事件驅(qū)動(dòng)方式就Click(單擊)一種。新近推出的Office97套件中的Excel97,在“工具”菜單中選擇“宏”后,就會(huì)發(fā)現(xiàn)增加了“Visual Basic編輯器”功能。運(yùn)用這個(gè)新增功能,就完全與Visual Basic編程無(wú)異了。在菜單欄上單擊鼠標(biāo)右鍵,選擇彈出式菜單中的“控件工具箱”,在“控件工具箱”工具條上,單擊待添加的控件按鈕,在工作表中將控件拖曳到所需位置和大小,單擊鼠標(biāo)右鍵選中“屬性”設(shè)置控件屬性后,雙擊控件就會(huì)出現(xiàn)Visual Basic編輯器。選擇該控件的一個(gè)事件如Click或Change,編寫(xiě)程序。在工作表中操作該控件,如鼠標(biāo)單擊、鍵入字符等,則觸發(fā)相應(yīng)事件,執(zhí)行相應(yīng)程序。

  筆者在Excel97平臺(tái),采用Visual Basic應(yīng)用程序版開(kāi)發(fā)了一套“通用報(bào)表分析系統(tǒng)”。該系統(tǒng)用于擁有眾多子公司的母公司的每月財(cái)務(wù)報(bào)表合并匯總。所有子公司的統(tǒng)計(jì)報(bào)表如資產(chǎn)負(fù)債表、損益表是由FoxBase編制的財(cái)務(wù)軟件生成的dbf文件,取名為ATV001xx.dbf----xx月份資產(chǎn)負(fù)債表,ATV002xx.dbf----xx月份損益表等。一個(gè)子公司的所有dbf文件放在一個(gè)單獨(dú)的目錄中,如C:\T\palm1,C:\T\palm2等。母公司每月份生成的匯總報(bào)表為T(mén)TTyymm.xls(yy----年份,mm----月份),它有“資產(chǎn)負(fù)債表”、“損益表”等若干工作表組成。每張工作表是由所有子公司相應(yīng)的dbf文件的相應(yīng)項(xiàng)目的數(shù)據(jù)相加而成。只要將dbf文件逐一轉(zhuǎn)化到TTTyymm.xls中去,很容易利用Excel的公式設(shè)置功能生成母公司的每張匯總報(bào)表。

  這套系統(tǒng)的關(guān)鍵在于如何將所有dbf文件轉(zhuǎn)換到同一個(gè)Excel工作簿中。直接通過(guò)“文件”菜單中的“打開(kāi)”項(xiàng), 選擇文件類(lèi)型為dBase文件(*.dbf), 可將dbf文件轉(zhuǎn)換到Excel工作簿中,但這工作簿只存轉(zhuǎn)換而來(lái)的一張工作表,其他表都自動(dòng)關(guān)閉了。另外,通過(guò)“工具”菜單中的“向?qū)А?,選擇“文件轉(zhuǎn)換”后, 只是將一系列dbf文件轉(zhuǎn)換為一系列xls文件而已。于是采用建立ODBC數(shù)據(jù)源獲取外部數(shù)據(jù)的辦法, 將dbf文件逐一轉(zhuǎn)換到一個(gè)Excel工作簿內(nèi), 且用Visual Basic for Application將轉(zhuǎn)換過(guò)程自動(dòng)化。只要按一下圖1中的“生成報(bào)表”按鈕, 就能完成所有dbf 文件的轉(zhuǎn)換, 且利用Excel公式自動(dòng)計(jì)算功能完成所有報(bào)表的匯總計(jì)算。按“顯示報(bào)表”按鈕,選擇表名,可以瀏覽報(bào)表數(shù)據(jù)。

  具體的方法是:

  一、 建立ODBC數(shù)據(jù)源

  (1) 打開(kāi)“數(shù)據(jù)”菜單, 選擇“獲取外部數(shù)據(jù)”, 然后單擊“新建查詢”;

  (2) 在“選擇數(shù)據(jù)源”對(duì)話框中, 雙擊“<新數(shù)據(jù)源>”;

  (3) 出現(xiàn)“創(chuàng)建新數(shù)據(jù)源”對(duì)話框,輸入數(shù)據(jù)源名稱(chēng), 選擇驅(qū)動(dòng)程序如Microsoft dBase Driver(*.dbf), 單擊“連接”;

  (4) 在“ODBC dBase安裝”對(duì)話框中, 單擊“使用當(dāng)前工作目錄”前的復(fù)選框, 去掉缺省( , 單擊“選定目錄(s)”, 選擇子公司存放dbf文件的目錄如C:\T\palm1, 連按“確定”;

  (5) 當(dāng)出現(xiàn)Microsoft Quary對(duì)話框時(shí), 單擊“關(guān)閉”, 退出。不要理會(huì)出現(xiàn)的警示信息,因?yàn)榇藭r(shí)只需建立數(shù)據(jù)源, 并不需要用Microsoft Query查詢數(shù)據(jù);

  (6) 重復(fù)上述步驟, 在(4)中改換另一家子公司的目錄, 就為另一家子公司建立一個(gè)數(shù)據(jù)源。必須建立所有子公司的數(shù)據(jù)源。
二、手動(dòng)獲取外部數(shù)據(jù)

  (1) 單擊“數(shù)據(jù)”,選取“獲取外部數(shù)據(jù)”,單擊“新建查詢”;

  (2) 出現(xiàn)“選取數(shù)據(jù)源”對(duì)話框,點(diǎn)中“使用查詢向?qū)?chuàng)建/ 編輯查詢”前的復(fù)選框,然后雙擊數(shù)據(jù)源名,如palm1;

  (3) 在“查詢向?qū)Аx擇列”對(duì)話框中選擇一個(gè)查詢表名,單擊 > 鍵,“查詢中用到的列”框內(nèi)會(huì)出現(xiàn)表中所有列名,單擊“下一步”;

  (4) 出現(xiàn)“查詢向?qū)А^(guò)濾數(shù)據(jù)”,單擊“下一步”;

  (5) 出現(xiàn)“查詢向?qū)А判蝽樞颉?,單擊“下一步”?

  (6) 出現(xiàn)“查詢向?qū)А瓿伞?,點(diǎn)中“將數(shù)據(jù)返回Microsoft Excel”前的單選鈕,單擊“完成”;

  (7) 出現(xiàn)“將外部數(shù)據(jù)返回到Excel”對(duì)話框,選中“新建工作表”,按“確定”;

  (8) 在建立查詢的工作簿內(nèi)新建工作表,并放入轉(zhuǎn)換好的數(shù)據(jù)。這樣就將一個(gè) dbf 文件轉(zhuǎn)換好了。

  (9)重復(fù)上述過(guò)程,所有子公司的dbf文件轉(zhuǎn)換到同一個(gè)工作簿中。

  三、 使用VB實(shí)現(xiàn)Excel自動(dòng)獲取外部數(shù)據(jù)

  (1) 進(jìn)行手動(dòng)獲取外部數(shù)據(jù)(1)步驟前,單擊“工具”菜單中的“宏”,選擇“錄制新宏”,在“宏名”的編輯框中鍵入宏名dbftoxls,按“確定”鍵;

  (2) 完成手動(dòng)獲取外部數(shù)據(jù)(1)-(8)步驟;

  (3) 單擊“工具”菜單中的“宏”,選擇“停止錄制”。這樣就將獲取外部數(shù)據(jù)的過(guò)程記錄為宏。

  (4) 編輯dbftoxls宏,加以修改,使它作為Visual Basic模塊表中的一個(gè)子程序,并設(shè)置調(diào)用參數(shù)。
提供的程序如下:

`設(shè)置初值
Const apppath = "c:\my documents\palmxls\"
Const modulefile = apppath + "module.xls"
Const staticspre = "TTT"
Const dbfpre = "ATV00"

`調(diào)用dbftoxls的模塊
Private Sub Cmdgeneratetable_Click()
 Dim staticsfile As String
 Dim s1 As String
 Dim s2 As String
 Dim s3 As String
 Dim idyes As Integer
 Dim dbfstring As String

On Error GoTo errhandler1
 idyes = 6
 s1 = txtyear.Text
 s1 = Mid(s1, 3, 2)
 s2 = txtmonth.Text
 If Len(s2) = 1 Then
  s2 = "0" + s2
 End If
 staticsfile = apppath + staticspre + s1 + s2 + ".xls"
 If FileLen(staticsfile) > 0 Then
  choice = MsgBox("該年月報(bào)表已存在,是否重新生成?", vbYesNo +        vbExclamation + vbDefaultButton1, "")
  If choice = idyes Then
   Workbooks.Open FileName:=staticsfile
   For i = 0 To companynum - 1
    For j = 0 To tablenum - 1
     dbfstring = dbfpre + Trim(Str$(j + 1)) + s2
     sqlstring = sqlstringfunc(dbfstring, fieldlist(),
           tablefieldnum(j))
     Call dbftoxls(s(i, j), sqlstring)
    Next j
   Next i
   ActiveWorkbook.Save
   ActiveWorkbook.Close
  End If
 End If
Exit Sub

errhandler1:
 Select Case Err
  Case 53
   Workbooks.Open FileName:=modulefile
   s3 = s1 + "年" + s2 + "月"
    Sheets("資產(chǎn)負(fù)債表").Range("e4").FormulaR1C1 = "注釋?zhuān)? + s3
    ActiveWorkbook.SaveAs FileName:=staticsfile, FileFormat _
    :=xlNormal, Password:="", WriteResPassword:="",   
    ReadOnlyRecommended:= _
    False, CreateBackup:=False
   For i = 0 To companynum - 1
    For j = 0 To tablenum - 1
     dbfstring = dbfpre + Trim(Str$(j + 1)) + s2
     sqlstring = sqlstringfunc(dbfstring, fieldlist(),
           tablefieldnum(j))
     Call dbftoxls(s(i, j), sqlstring)
    Next j
   Next i
   ActiveWorkbook.Save
   ActiveWorkbook.Close
 End Select
End Sub

 `dbftoxls子程序
Sub dbftoxls(activesheetname, sqlstring)
 Sheets(activesheetname).Activate
 Cells.Select
 Selection.Clear
 Range("a1").Select
 With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
    "ODBC;CollatingSequence=ASCII;DBQ=C:\T\palm1;DefaultDir=
    C:\T\palm1;Deleted=1;
    Driver={Microsoft dBase Driver (*.dbf)};
    DriverId=533;FIL"), Array( "=dBase III;
    ImplicitCommitSync=Yes;
    MaxBufferSize=512;
    MaxScanRows= 8;
    PageTimeout=600;
    SafeTransactions=0;
    Statistics=0;
    Threads=3;Use" ), Array("rCommitSync=Yes;")),   
    Destination:=Range("A1"))
   .Sql = Array( sqlstring)
   .FieldNames = True
   .RefreshStyle = xlInsertDeleteCells
   .RowNumbers = False
   .FillAdjacentFormulas = False
   .RefreshOnFileOpen = False
   .HasAutoFormat = True
   .BackgroundQuery = True
   .TablesOnlyFromHTML = True
   .Refresh BackgroundQuery:=False
   .SavePassword = True
   .SaveData = True
 End With
End Sub

相關(guān)頻道: eNews

您對(duì)本文或本站有任何意見(jiàn),請(qǐng)?jiān)谙路教峤?,謝謝!

投稿信箱:tougao@enet16.com