Функция, которая возвращает результат, но вставляет его как значение в ту же ячейку, где была написана функция? - PullRequest
0 голосов
/ 20 июня 2019

Как я могу исправить функцию, которая возвращает результат в той же ячейке, но вставить его как значение в ту же ячейку, где была написана функция?

например для ячейки B2 я написал функцию = txtGetId (A2) так что теперь B2 вернул, например, «T1011», теперь я хочу, чтобы этот результат был вставлен как значение в B2:)

Это моя функция, которая в основном перебирает все строки и автоматически присваивает новый идентификатор.

Function txtGetID(CellRef As String) As String
Dim sh As Worksheet
Dim rw As Range
Dim numID As String
Dim RowCount As Integer
Dim txtID As String
Dim txtcellID As String
Dim ResID As String
Dim fflag As Integer
Dim FResID As String
Dim txtCellValue As String
RowCount = 0
Set sh = ActiveSheet
ResID = sh.Cells(ActiveCell.Row, 2).Value
fflag = 1
numID = "00"

Do While fflag = 1
    fflag = 0
    numID = Right("00" & LTrim(Str((Val(numID) + 1))), 2)

    For Each rw In sh.Rows
        If sh.Cells(rw.Row, 1).Value = "" Then
            Exit For
        End If

        txtCellValue = sh.Cells(rw.Row, 1).Value

        If ResID & numID = txtCellValue Then
            fflag = 1
            Exit For
        End If

        'txtcellID = sh.Cells(rw.Row, 1).Value

        If sh.Cells(rw.Row, 1).Value = "" Then
            Exit For
        End If

    Next rw
        For Each rw In sh.Rows
        If fflag = 1 Then
            Exit For
        End If


        txtCellValue = sh.Cells(rw.Row, 5).Value

        If ResID & numID = txtCellValue Then
            fflag = 1
            Exit For
        End If

        'txtcellID = sh.Cells(rw.Row, 3).Value

        If sh.Cells(rw.Row, 5).Value = "" Then
            Exit For
        End If
    Next rw

Loop
FResID = ResID & numID
txtGetID = FResID
End Function

запись чего-либо до оператора «Конец функции» будет просто бесполезной, потому что функция вернется с результатом в конце. Я пытался использовать это

ActiveCell.Activate
ActiveCell.Select
activecell.Value=FResID

но это вообще ничего не сделало.

1 Ответ

0 голосов
/ 20 июня 2019

Что вы можете попробовать (упрощенно):

1) Создайте свою функцию, например ::

Public ADRS As String

Option Explicit

Function Test(RNG As Range) As String

ADRS = ActiveCell.Address
Test = RNG.Value

End Function

2) При вводе функция вызовет событие вычисления рабочего листа, поэтому под конкретной записью рабочего листа, например ::

Private Sub Worksheet_Calculate()

Range(ADRS).Value = Range(ADRS).Value

End Sub

Вы также можете поставить его под ThisWorkbook примерно так:

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

Range(ADRS).Value = Range(ADRS).Value

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