標題:
[發問]
請問該如何比對陣列中的資料與工作表姓名 ?
[打印本頁]
作者:
j1221
時間:
2012-2-9 13:07
標題:
請問該如何比對陣列中的資料與工作表姓名 ?
各位前輩好,
小弟想利用 vba每天收盤後更新op的價格和未平倉資料,但是在執行上遭到一些問題,還請各位幫忙解答,我的問題如下:(模組三,煩請參閱附件)。
我先用外部連結更新台期所的資料,然後提取出來儲存到陣列A裡面,之後再利用迴圈把儲存照順序存入指定的工作表和儲存格,出問題的地方有兩個:
1.當我把所有資料存入陣列,我要先判斷相對應的工作表是否已存在(比如說5600履約價),所以我寫了一個小的迴圈判斷
For iM = 1 To isheetsnumber 'small loop to test if the worksheet exists, exists =true otherwise false
If ThisWorkbook.Sheets(iM).Name = varA(I, 1, 8) Then
Sheets_Exist = True:Exit For
Else
Sheets_Exist = False
End If
Next iM
複製代碼
這邊的varA(I,1,8)就是我的陣列之一(更外面還有一個I的 For 迴圈),但不管我怎麼測式,出來的都是False
2.第二個問題是,假設可以找到這個工作表,我想要把對應的資料由迴圈內填進去,所以我要【指定這個名字】的工作表,不知道該怎麼做?
我原先很白癡的以為可以用
With Sheets("varA(I,1,8)")
但是好像不行,請問這種情況該怎麼處理呢?
煩請各位前輩參考附件[attach]9509[/attach]
謝謝各位的幫忙:D
作者:
luhpro
時間:
2012-2-9 22:21
回復
1#
j1221
1. 如果只會開一個 Excel 檔, 則不用打 ThisWorkbook, 若怕同時可能開啟超過一個 Excel 檔案,
則請於開檔時就直接設定指標到該檔,否則若使用 ThisWorkBook 還是可能會抓到另一個檔案的內容.
例如 :
在 Module 裡加上
Dim vOP_OI
再在 Workbook_Open 裡加上
set vOP_OI=ThisWorkbook
引用時則可用 vOP_OI.Sheets(2).Name 來抓取 Sheet 的 Name
2. 要引用 Sheet 的名字時, Variant 外不用再加 ""
因為你的檔案我這裡不能正常執行, 所以我針對你所說的問題點,另外用一個程式來模擬,你參考看看 :
Private Sub Workbook_Open()
Dim iI%, iJ%
Dim vShtName(10, 2, 8)
Set vOP_OI = ThisWorkbook
iJ = Sheets.Count
For iI = 1 To iJ
vShtName(iI, 2, 8) = Sheets(iI).Name
Debug.Print Sheets(iI).Name = vShtName(iI, 2, 8)
Next iI
For iI = 1 To iJ
Sheets(vShtName(iI, 2, 8)).Cells(1, 1) = Sheets(vShtName(iI, 2, 8)).Cells(1, 1) + iI
Next iI
MsgBox vOP_OI.Sheets(2).Cells(1, 1)
End Sub
複製代碼
[attach]9517[/attach]
請進巨集的編輯器後按 F8 單步執行 觀察相關變數異動情形, 希望能對你有所幫助.
作者:
GBKEE
時間:
2012-2-10 07:34
回復
1#
j1221
If ThisWorkbook.Sheets(iM).Name = varA(I, 1, 8)
& ""
Then
工作表名稱是 "字串",
varA(I, 1, 8) 是數字
& ""
連結自符號轉變為字串
附檔 Private Sub Workbook_Open()
Sheets("TXF").[B7:P18007] = "" 沒這工作表
所有的 Module 一般模組 只可以有一個 Sub Auto_Open()
作者:
j1221
時間:
2012-2-11 08:44
回復
2#
luhpro
謝謝luhpro大,多學了一個Debug.Print 方法,也謝謝您的附件,我再研究看看!:D
作者:
j1221
時間:
2012-2-11 08:46
回復
3#
GBKEE
感謝GBKEE大解惑,我一直不知道該怎麼做,原來在尾巴加入&""就可以!!
也學到原來只能有一個Module可以用sub auto_open()
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)