Использование варианта массива для обновления ячеек - PullRequest
0 голосов
/ 06 июня 2018

В следующем подмножестве кода я пытаюсь, чтобы Excel vba обновил второй столбец, добавив апостроф в начало каждой ячейки в диапазоне.Как мне ссылаться на каждую ячейку, чтобы добавить апостроф после этой строки:

myRange = .Range ("b2: b"). Значение

Вот остальныекод пока:

> Private Sub cmdTest_Click()
> 
> Dim objExcel As Excel.Application Dim objWB As Excel.Workbook Dim
> objWBtoAdd As Excel.Workbook Dim newWS As Excel.Worksheet Dim objWS As
> Excel.Worksheet Dim i As Long Dim myRange As Range Dim Cell As Range
> 
>   Set objExcel = New Excel.Application   objExcel.Visible = True   Set
> objWB = Workbooks.Open("C:\TEST\Drop\Bank.xlsx", , False) Set
> objWBtoAdd = Workbooks.Add Set newWS = objWBtoAdd.ActiveSheet   Set
> objWS = objWB.ActiveSheet
>  
>     With objWS
>    
>         
>         myRange = .Range("b2:b").Value
>         
>         .Range("b2:b").Value = myRange
>         
>                  
>     
>     End With
> 
>  
> 
> 
> 
> End Sub

1 Ответ

0 голосов
/ 06 июня 2018

Ваш код:

  • объявляет и присваивает objWBtoAdd и newWS, но они нигде не используются
  • переменные i и cell также не используются
  • Он просто пытается присвоить недопустимый диапазон .Range("b2:b").Value другой переменной Range
  • Затем переменная Range возвращается к недопустимому диапазону без изменения значений

Эта запись не является допустимой. Диапазон: .Range("b2:b")

  • Он должен содержать адрес 1-й ячейки - "B2" & ":" & "B9" (адрес последней ячейки в диапазоне)

Если вам нужно "обновить второй столбец, добавив апостроф в начало каждой ячейки в диапазоне" и скопировать столбец на новый лист, попробуйте код ниже


Option Explicit

Private Sub cmdTest_Click()

    Const INI_PATH = "C:\TEST\Drop\Bank.xlsx"
    Const NEW_PATH = "C:\TEST\Drop\BankNew.xlsx"

    Dim xlApp As Excel.Application: Set xlApp = New Excel.Application
    Dim wbIni As Excel.Workbook:    Set wbIni = xlApp.Workbooks.Open(INI_PATH, , False)
    Dim wbNew As Excel.Workbook:    Set wbNew = xlApp.Workbooks.Add

    Dim ws As Excel.Worksheet, colBIni As Range, colBNew As Range, lr As Long

    'xlApp.Visible = True
    Set ws = wbIni.ActiveSheet  'Prefer explicit: Set ws = wbIni.Worksheets("Sheet3")

    lr = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row

    Set colBIni = ws.Range(ws.Cells(2, "B"), ws.Cells(lr, "B"))
    Set ws = wbNew.ActiveSheet  'Prefer explicit: Set ws = wbNew.Worksheets("Sheet1")
    Set colBNew = ws.Range(ws.Cells(2, "B"), ws.Cells(lr, "B"))

    Dim arr As Variant, r As Long

    arr = colBIni.Value2            'copy colB to array
    For r = 1 To UBound(arr)
        arr(r, 1) = "'" & arr(r, 1) 'modify array values
    Next
    'colBIni.Value2 = arr           'paste array to colB (Ini file)
    colBNew.Value2 = arr            'paste array to colB (New file)

    wbNew.Close SaveChanges:=True, Filename:=NEW_PATH   'Save new File
    wbIni.Close SaveChanges:=False
End Sub

.

Если столбец B содержит только формулы или URL-адреса, вам не нужно использовать цикл For

With ws.UsedRange.Columns("B")  'all cells with data (and formatting) in column B
    .Replace "=", "'="
    .Replace "https://", "'https://"
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...