Значение автоинкремента VBA Excel на следующем листе при изменении данных на активном листе - PullRequest
0 голосов
/ 31 марта 2020

Я бы хотел, чтобы мои значения увеличивались на следующем листе на 1 после выполнения кода на активном листе.

Ситуация выглядит следующим образом: Publi c Sub ResizeCiv2 ()

   Dim targetSheet As Worksheet
   Dim targetRange As Range
   Dim targetShape As Shape


' Define the sheet that has the pictures
Set targetSheet = ThisWorkbook.ActiveSheet
' Define the range the images is going to fit
Set targetRange = targetSheet.Range("C3:K24")

' Loop through each Shape in Sheet
For Each targetShape In targetSheet.Shapes
    ' Check "picture" word in name
    If targetShape.Name Like "*Picture*" Then
        ' Call the resize function
        SizeToRange targetShape, targetRange
    End If

   Next targetShape

   Call CivBox
   Call Divider

   ActiveSheet.Range("M15").Value = Range("D52")
   With Sheets("Cables 1").Range("C50:C51")
   .Value = .Value + 1
   End With

  End Sub

И теперь отладчик выделяет .Value = .Value + 1, говоря, что это несоответствие типов.

enter image description here

Это мой активный лист с одним изображением. Согласно приведенному выше коду, я собираюсь иногда добавлять еще одну картинку. Если это так, мне нужно увеличить значение на 1 на следующем листе ...

enter image description here

Если я не могу сделать это ни с помощью оператора With или с Sheet("Cables 1").Range("C50").Value = Range("C50").Value + 1 есть ли возможность запустить его?

Возможно, это связано с этим запросом: Как мне упростить или l oop excel vba код для обмена данными на разных листах?

ОБНОВЛЕНИЕ:

Я нашел какое-то решение здесь:

Увеличение значений ячеек в диапазоне на 1 с VBA Excel

и попробовал с моим кодом ...

Public Sub ResizeCiv2()

Dim targetSheet As Worksheet
Dim targetRange As Range
Dim targetShape As Shape
Dim rng As Range

Set rng = Sheets("Cables 1").Range("C50:C51")

' Define the sheet that has the pictures
Set targetSheet = ThisWorkbook.ActiveSheet
' Define the range the images is going to fit
Set targetRange = targetSheet.Range("C3:K24")

' Loop through each Shape in Sheet
For Each targetShape In targetSheet.Shapes
    ' Check "picture" word in name
    If targetShape.Name Like "*Picture*" Then
        ' Call the resize function
        SizeToRange targetShape, targetRange
    End If

Next targetShape

Call CivBox
Call Divider

ActiveSheet.Range("M15").Value = Range("D52")

Dim myCell As Range
With rng
myCell = myCell + 1
End With

 End Sub

Теперь отладчик говорит: Переменная объекта или переменная не установлена ​​

Когда Я контролирую строку myCell с Value = .Value + 1, затем получаю ошибку: Несоответствие типов

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Я нашел ответ на мою проблему здесь:

Как увеличить значение ячейки в Excel с помощью VBA? Ошибка: несоответствие типов

, поэтому мой код должен выглядеть следующим образом:

Public Sub ResizeCiv2()

Dim targetSheet As Worksheet
Dim targetRange As Range
Dim targetShape As Shape

Set rng = Sheets("Cables 1").Range("C50:C51")

' Define the sheet that has the pictures
Set targetSheet = ThisWorkbook.ActiveSheet
' Define the range the images is going to fit
Set targetRange = targetSheet.Range("C3:K24")

' Loop through each Shape in Sheet
For Each targetShape In targetSheet.Shapes
    ' Check "picture" word in name
    If targetShape.Name Like "*Picture*" Then
        ' Call the resize function
        SizeToRange targetShape, targetRange
    End If

Next targetShape

Call CivBox
Call Divider

ActiveSheet.Range("M15").Value = Range("D52")
Sheets("Cables 1").Cells(50, 3).Value = Sheets("Cables 1").Cells(50, 3).Value + 1
Sheets("Cables 1").Cells(51, 3).Value = Sheets("Cables 1").Cells(51, 3).Value + 1

End sub

Где вместо «диапазона» я указываю определенные ячейки на листе.

0 голосов
/ 31 марта 2020

более очевидным решением будет цикл по ячейкам

, но вы можете поиграть с опцией PasteSpecial, чтобы добавить значения в ячейки:

With Sheets("Cables 1")
    .Range("A1").Copy '<-- change A1 to whatever cell address you'd use to store increment value
    .Range("C50:C51").PasteSpecial Operation:=xlPasteSpecialOperationAdd
    Application.CutCopyMode = False
End With

, где я сохранил значение требуется увеличение в ячейке "A1", но вы можете изменить его как в адресе ячейки, так и в приращении

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...