Board logo

標題: [發問] 請問該如何比對陣列中的資料與工作表姓名 ? [打印本頁]

作者: j1221    時間: 2012-2-9 13:07     標題: 請問該如何比對陣列中的資料與工作表姓名 ?

各位前輩好,

小弟想利用 vba每天收盤後更新op的價格和未平倉資料,但是在執行上遭到一些問題,還請各位幫忙解答,我的問題如下:(模組三,煩請參閱附件)。

我先用外部連結更新台期所的資料,然後提取出來儲存到陣列A裡面,之後再利用迴圈把儲存照順序存入指定的工作表和儲存格,出問題的地方有兩個:

1.當我把所有資料存入陣列,我要先判斷相對應的工作表是否已存在(比如說5600履約價),所以我寫了一個小的迴圈判斷
  1. For iM = 1 To isheetsnumber  'small loop to test if the worksheet exists, exists =true otherwise false
  2.             If ThisWorkbook.Sheets(iM).Name = varA(I, 1, 8) Then
  3.                 Sheets_Exist = True:Exit For
  4.             Else
  5.                 Sheets_Exist = False
  6.             End If
  7.      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 外不用再加 ""


因為你的檔案我這裡不能正常執行, 所以我針對你所說的問題點,另外用一個程式來模擬,你參考看看 :
  1. Private Sub Workbook_Open()
  2.   Dim iI%, iJ%
  3.   Dim vShtName(10, 2, 8)
  4.   
  5.   Set vOP_OI = ThisWorkbook
  6.   
  7.   iJ = Sheets.Count
  8.   For iI = 1 To iJ
  9.     vShtName(iI, 2, 8) = Sheets(iI).Name
  10.     Debug.Print Sheets(iI).Name = vShtName(iI, 2, 8)
  11.   Next iI
  12.   
  13.   For iI = 1 To iJ
  14.     Sheets(vShtName(iI, 2, 8)).Cells(1, 1) = Sheets(vShtName(iI, 2, 8)).Cells(1, 1) + iI
  15.   Next iI
  16.   
  17.   MsgBox vOP_OI.Sheets(2).Cells(1, 1)
  18. 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/)