<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                [TOC] > Mon Apr 26 2021 16:15:18 GMT+0800 (GMT+08:00) 從 VBA 轉到 JS宏之后,基本單元格描述的變化: 1. VBA 中你可以用 `[A1]`表示單元格 A1,但在 JS中不可以; ```vb ' VBA [A1] = 5 '可以給A1寫入 5 ``` > VB中表示單元格很簡單的寫法。但到 JS 中就是另一碼事了,相當于解構賦值。 ```js // JS [A1] = 5 // 報錯 // 編譯器會往解構賦值方向去解析表達式,下面這種則是相當于把 5 賦值給變量 A1 [A1] = [5] Console.log(A1) // 5 ``` > 另外,`[]` 符號在 JavaScript 中是數組標記,`[1,2,3]`:一個包含 1,2,3 三個元素的一維數組,相當于 Array(1,2,3) 2. 讀取單元格的值要用 Value() 方法;用 Value2 屬性給單元格寫入數據。Value2 也可以讀取值。 ```js function _m_read_Write(){ let a2_value = Range("A2").Value() // 讀取值 let a2 = Range("A2").Value2 // 使用 Value2 Range("A1").Value2 = a2_value // 寫入內容 } ``` 3. `Range("A1")` 這個寫法沒什么變化。 4. Range.Item 的寫法: ```js // A1的值 Range("A1").Item(1).Value() // 等效于Range("A1") // 單元格順序 Range("C2:D6").Item(1).Value() // C2:D6 區域內的第一格。 ``` 5. Cells.Item的寫法: ```js Cells.Item(1,1).Value() // 使用 列名 Cells.Item(1,"A").Select() // 使用 Item 偏移——不使用行列坐標 Cells.Item(1).Select() ``` ## 單元格區域 前面的例子都是基于整個激活的工作表進行的。Range 和 Cells代表整個工作表的單元格集合。當我們限定了單元格區域后,Item 偏移將從單元格區域內的第一格作為起始偏移點。 ```js function _m_Item_test(){ let myArea = Range("D1:F10") let myCells = myArea.Cells let Va = myArea.Item(1) let Vb = myCells.Item(1) Console.clear() Console.log( Va.Row == Vb.Row ) Console.log( Va.Column == Vb.Column ) } // 行、列偏移將從單元格區域第一格作為起始。不推薦!!會超出限定的單元格區域 function _m_Item_test(){ let myArea = Range("D1:F10") let myCells = myArea.Cells let Va = myArea.Item(1,2)// 只跟 D1 有關系,等效于:Range("D1").Offset(0,1) let Vb = myCells.Item(1,2)// 只跟 D1 有關系,等效于:Range("D1").Offset(0,1) Console.clear() Console.log( Va.Row == Vb.Row ) Console.log( Va.Column == Vb.Column ) } ``` 為什么在沒有限定區域時為什么能和整表的坐標重合?Cells.Item(1,1) 正好是 A1,因為在沒有限定對象的時候,默認將整個工作表作為單元格區域,這個區域的起始單元格正好是A1。 當你想要讓偏移是基于整個工作表的時候,就單用 Cells.Item 即可,此時就有個問題了,單用 Cells.Item 指向的是激活狀態的工作表。那要怎么弄呢?跟這里的例子一樣,我們只需將工作表的單元格作為 Cells 對象即可: ```js function _m_Cells_test(){ let myRange = Worksheets.Item("Sheet2").Cells // Sheet2 的 Cells 對象,此時 myRange 代表Sheet2 工作表的所有單元格對象集合。 let targetRange = myRange.Item(2,2) Console.log(targetRange.Address()) } ``` ## 單元格比較 在 VBA 中,我們可以直接拿兩個單元格進行比較(假設它們的內容都是1,格式一致): ```vb debug.Print Range("A1")=Range("A2") ``` 在 JS 宏中則: ```js // 你需要先獲取值才能比較 Range("A1").Value()==Range("A2").Value() // Range("A1") 這個在 JSAPI 中表示的單元格對象,它不會像 VBA 那樣自行先讀值然后比較,像 VBA 那樣寫則: Range("A1") == Range("A2") // false 哪怕是下一行那樣子的: Range("A1") == Range("A1") // false 雖然表示同一個對象,但對象不等于對象。看看下面的例子: []==[] // false // 但這樣是相等的 Object==Object // true ``` ## Range.End 屬性 返回一個 Range 對象,該對象代表包含源區域的區域尾端的單元格。等同于按鍵 End+ 向上鍵、End+ 向下鍵、End+ 向左鍵或 End+ 向右鍵。Range 對象,只讀。 很實用的一個屬性,可以幫助我們動態定位。但并不是很準確,它要求很苛刻: 1. 起始單元格是不是非空并不重要,`Range("A1").End(xlDown)` 中“A1” 是不是非空不影響它向下查找。 2. 如果沒有非空單元格阻攔,它會走到“盡頭”,`Range("A1").End(xlDown)` 中,如果A列往下沒有非空單元格,它將返回A列的最后一格(A1048576)。 通常地,為了準確地鎖定一個有限大的區域,我會: > 假設我要從某一個單元格向四周(上、下、左、右)尋找最后非空單元格。 * 檢查起始單元格臨近的四個單元格是不是非空單元格。因為只有跟起始單元格相連的單元格非空,那個方向上才有可能是連片的非空,不然則很有可能跑到“盡頭”去或者將其他區域的單元格納入。 * 如果起始單元格的四周相連的單元格都是空的,則直接從起始單元格開始操作。畢竟很少會有數據跑到最后一格,也不想冒險將其他不相連的區域納入操作范圍。 > 當然了,具體得視情況另行操作。 ## Range.Offset 屬性 返回 Range 對象,它代表位于指定單元格區域的一定的偏移量位置上的區域。 這跟 Offset函數很像,但是沒有最后的兩個參數(width/寬度,height/高度)。 ## Range.Resize 屬性 調整指定區域的大小。返回 Range 對象,該對象代表調整后的區域。 名稱|必選/可選|數據類型|說明 ---|----|-----|---- RowSize|可選|Variant|新區域中的行數。如果省略該參數,則該區域中的行數保持不變。 ColumnSize|可選|Variant|新區域中的列數。如果省略該參數。則該區域中的列數保持不變。 ```js let rng = Range("A2:B4") rng_row = rng.Rows.Count rng_column = rng.Columns.Count let newrng = rng.Resize(rng_row+1,rng_column+1) Console.clear() Console.log(`rng.Count:${rng.Count}; newrng.Count:${newrng.Count}`) ``` ## Range.Item 屬性 移步 【繞坑——那些奇奇怪怪的問題】-> 【 Item 屬性快把你逼瘋了吧】
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看