Board logo

標題: [發問] [發問]陣列內數值間格問題 [打印本頁]

作者: mark15jill    時間: 2013-1-22 14:55     標題: [發問]陣列內數值間格問題

本帖最後由 mark15jill 於 2013-1-22 14:57 編輯

說明
要用A.xls Form表單 讀取 B.xls Form表單

資料為
B.xls 資料 為 一列 10欄 (從B欄位讀取到 J欄位 ,A欄位不讀取但有判斷)
表單元件 3*3 Textbox
cmbox(2).Text 為 Combobox陣列的第二個 作為序號對應用


疑問點
1.要怎把原始碼那三行濃縮成一行?
因有間隔問題    如: 陣列 X*0 <X為0-2> 為  B 欄 ~ D欄 、陣列 X*1 <X為0-2> 為  E 欄 ~ G欄、陣列 X*2 <X為0-2> 為  H 欄 ~ J欄

2.若將 陣列3*3 視為連續元件(如 txt1(0~8)   )並搭配原始碼  要如何搭配?


原始碼

        For kkex = 0 To 2
            txt1(kkex, 0).Text = oSheet.cells(cmbox(2).Text + 1, kkex + 2).value
            txt1(kkex, 1).Text = oSheet.cells(cmbox(2).Text + 1, kkex + 5).value
            txt1(kkex, 2).Text = oSheet.cells(cmbox(2).Text + 1, kkex + 8).value
        Next
作者: GBKEE    時間: 2013-1-22 15:48

回復 1# mark15jill
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim kkex, R, C, txt1(0 To 2, 0 To 2)
  4.     kkex = 0: R = 1
  5.     For C = 2 To 10 Step 3
  6.         txt1(kkex, 0) = Cells(R, C).Value
  7.         txt1(kkex, 1) = Cells(R, C + 1).Value
  8.         txt1(kkex, 2) = Cells(R, C + 2).Value
  9.         kkex = kkex + 1
  10.     Next
  11. End Sub
複製代碼

作者: mark15jill    時間: 2013-1-22 15:51

本帖最後由 mark15jill 於 2013-1-22 15:52 編輯

回復 2# GBKEE


TO GBKEE大大
    謝謝大大的教導。
    大大所提供的教學仍為多行
    這點小弟沒說清楚 抱歉

     
     原本程式碼
       For kkex = 0 To 2
            txt1(kkex, 0).Text = oSheet.cells(cmbox(2).Text + 1, kkex + 2).value
            txt1(kkex, 1).Text = oSheet.cells(cmbox(2).Text + 1, kkex + 5).value
            txt1(kkex, 2).Text = oSheet.cells(cmbox(2).Text + 1, kkex + 8).value
        Next

       想變成
        For kkex = 0 To 2
            txt1(kkex, kkey).Text = oSheet.cells(cmbox(2).Text + 1, kkex + 2).value   '紅字部份為疑問點     kkey 為 陣列中的循環
        Next
作者: Hsieh    時間: 2013-1-22 16:31

回復 1# mark15jill


         For kkex = 0 To 2
            txt1(kkex, kkex).Text = oSheet.Cells(cmbox(2).Text + 1, kkex * 3 + 2).Value
        Next
作者: mark15jill    時間: 2013-1-22 16:52

本帖最後由 mark15jill 於 2013-1-22 16:53 編輯

回復 4# Hsieh


    To Hsieh 大大
    謝謝教導
但這樣會造成錯亂

txt1(kkex, kkex).Text = oSheet.Cells(cmbox(2).Text + 1, kkex * 3 + 2).Value

If  kkex = 0 then txt1(kkex, kkex).Text = oSheet.Cells(cmbox(2).Text + 1,  2).Value

If  kkex =1 then txt1(kkex, kkex).Text = oSheet.Cells(cmbox(2).Text + 1,  5).Value

If  kkex = 2 then txt1(kkex, kkex).Text = oSheet.Cells(cmbox(2).Text + 1,  8).Value

若將程式帶入數值的話 會變成 2 3 4 6 7 9 10 欄位讀取失效
作者: Hsieh    時間: 2013-1-22 16:58

回復 5# mark15jill


    所以你是要3*3的二維陣列?
         For kkex = 0 To 2
           For i = 0 To 2
            txt1(kkex, i).Text = oSheet.Cells(cmbox(2).Text + 1, i * 3 + 2).Value
           Next
        Next
作者: mark15jill    時間: 2013-1-22 17:22

回復 6# Hsieh


    2維的 一維陣列...@@"

小弟換個方式說好了...

陣列(3*3)
A1    A2    A3
B1    B2     B3
C1    C2     C3

來源檔案
B欄位 至 J欄位(2~10)

        '        For kkex = 0 To 2
        '        txt1(kkex, 0).Text = oSheet.cells(cmbox(2).Text + 1, kkex + 2).value  (B~D欄位)
        '        txt1(kkex, 1).Text = oSheet.cells(cmbox(2).Text + 1, kkex + 5).value  (E~G欄位)
        '        txt1(kkex, 2).Text = oSheet.cells(cmbox(2).Text + 1, kkex + 8).value  (H~J欄位)
        '        Next

想要將 那三行 合併成一行
kkex 為 陣列中的 X值
kkey 為 陣列中的 Y值
cmbox(2).Text + 1  可當作單一數值

        '        txt1(kkex, kkey).Text = oSheet.cells(cmbox(2).Text + 1, kkex + 2).value    '紅字須請大大教導
作者: Hsieh    時間: 2013-1-22 22:16

回復 7# mark15jill
到底有幾個TEXTBOX?
有多少儲存格的值要填進去這些TEXTBOX?
若是3*3的物件陣列,只能塞9個值,何來B~D、E~G、H~J?
[attach]14047[/attach]
把檔案上傳說明吧!
作者: stillfish00    時間: 2013-1-23 01:50

回復 7# mark15jill

        '        For kkex = 0 To 2
        '        txt1(kkex, 0).Text = oSheet.cells(cmbox(2).Text + 1, kkex + 2).value  (B~D欄位)
        '        txt1(kkex, 1).Text = oSheet.cells(cmbox(2).Text + 1, kkex + 5).value  (E~G欄位)
        '        txt1(kkex, 2).Text = oSheet.cells(cmbox(2).Text + 1, kkex + 8).value  (H~J欄位)
        '        Next
想要將 那三行 合併成一行

為何要合併 , 合併不會比較清楚
For i = 0 to 8
     txt1(int(i/3), i mod 3).Text = oSheet.cells(cmbox(2).Text + 1, Int(i / 3) + 3 * (i Mod 3) + 2).value
Next
作者: mark15jill    時間: 2013-1-23 08:29

回復 9# stillfish00


    To Hsieh 大大
   從 A欄~J欄 共有10欄位 A欄位不算的話 有9欄位
   如您圖所示,但黃色部分為列 不是橫跨三列
   例 B1~J1 為一筆資料
   cmbox(2).text +1 ==> 如 cmbox(2).text=0
  則 cmbox(2).text +1 數值為 1(第一列)。

To stilllfish00 大大
   因為該完整程式碼過長(功能設定太多),
   而且程式碼似乎有規律性(分開寫的話),
   才想說能否找方法節省~"~

   測試OK 謝謝兩位大大的教導




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)