vba - 如何在VBA中创建一个可以自动确定矩阵边界的宏

标签 vba excel matrix

我昨天开始使用 VBA 编程,因此我还是新手。

我尝试制作一个自动为我定义某些区域的宏,虽然它在我的工作表中运行良好,但它仍然受到限制,因为我使用它的所有工作表都必须在设置中相同。

我目前正在定义 5 个区域

  • A_mål - 单细胞
  • Tank_Tabel - 矩阵
  • Int_Tabel - 矩阵
  • 外滩-单格
  • HF - 单电池

  • 我的问题的最佳宏是提示用户输入容器编号,然后使用该编号自动确定可以在哪张纸上找到所述容器的信息,并自动确定列出的区域在哪里,并用给定的名称和用户输入的数字定义它们。

    代码可以在这里看到:
    Option Compare Text
    Sub Definer()
        Dim TankNr As Integer, rHF As Range, rAM As Range, rBV As Range, rTT As Range, rIT As Range
    
        If MsgBox("Vil du definere nye områder for en tank", vbYesNo, "Confirm") = vbYes Then
    
            TankNr = Application.InputBox("Indtast tank nr på den tank du vil definere områder for", "Tank Nummer", Type:=1)
            If TankNr <> 0 Then
    
                Set rHF = Sheets("Tank " & TankNr).Cells.Find(What:="HØJESTE FYLDEGRÆNSE =", LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
                If Not rHF Is Nothing Then
                    rHF.Offset(, 3).Name = "HF_" & TankNr
                End If
    
                Set rTT = Sheets("Tank " & TankNr).Cells.Find(What:="Enhed i tabellen : Liter", LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
                If Not rTT Is Nothing Then
                    rTT.CurrentRegion.Offset(2, 0).Resize(rTT.CurrentRegion.Rows.Count - 2).Name = "Tabel_tank" & TankNr
                End If
    
                Set rIT = Sheets("Tank " & TankNr).Cells.Find(What:="Interpolationstabel", LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
                If Not rIT Is Nothing Then
                    rIT.Resize(11, 11).Offset(1, 0).Name = "Int_tank" & TankNr
                End If
    
                Set rBV = Sheets("Tank " & TankNr).Cells.Find(What:="Bundvolumen =", LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
                If Not rBV Is Nothing Then
                    rBV.Offset(, 2).Name = "Bund" & TankNr
                End If
    
                Set rAM = Sheets("Tank " & TankNr).Cells.Find(What:="A-MÅL =", LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
                If Not rAM Is Nothing Then
                    rAM.Offset(, 1).Name = "A_mål" & TankNr
                End If
    
                MsgBox "Områder er blevet defineret"
    
            End If
        End If
    End Sub
    

    这有几个问题:
  • 如果用户在输入框中输入了一个非整数,代码会以错误结束,而不仅仅是结束宏。 已解决
  • 如果用户在输入框中点击取消,代码也会以错误结束,而不是结束宏。 已解决
  • 我尝试使用输入“TankNr”作为引用,但它不返回单元格的值 but just what I've written as the reference 已解决
  • 最后,每个定义区域的当前边界由我手动确定,如果我正在寻找的值,它工作正常。是 实际上在那些特定的细胞中。有时工作表的设置可能会有所不同,因此我需要宏能够自动确定定义区域的边界应该是。已解决

  • 有问题的床单可以看到here

    由于我的声誉,我只能包含这两个链接,但如果有办法提供更多我的工作文档,请告诉我,我会很乐意这样做。

    最佳答案

    这是我将使用的方法。对于 HF,这只是一个示例,但希望您能理解并可以扩展到其他范围。我假设命名范围是包含“HF”的单元格右侧的单元格。

    Sub OptimalSolution()
    
    Dim TankNr As Integer, rHF As Range
    
    If MsgBox("Do you wish to define new areas for a container?", vbYesNo, "Confirm") = vbYes Then
        TankNr = Application.InputBox("Please enter the container number", "Container Number", , , , , , 1)
        Set rHF = Sheets("Ark" & TankNr).Cells.Find(What:="HF", LookAt:=xlWhole, MatchCase:=True, SearchFormat:=False)
        If Not rHF Is Nothing Then
            rHF.Offset(, 1).Name = "HF_" & TankNr
        End If
    End If
    
    End Sub
    

    关于vba - 如何在VBA中创建一个可以自动确定矩阵边界的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43098922/

    相关文章:

    java - 从Java到C的矩阵转置移植,类型不兼容的问题

    vba - 微软 Outlook 2013 : Error verify VBA project signature

    vba - Excel输入框最多打印多少份

    vba - Excel VBA 另存为制表符分隔文件

    java - 有没有一种优雅的方法可以从 List<POJO> 生成 Excel 电子表格? (Java)

    r - 错误 : sigma must be positive definite

    excel - 昏暗如字典。编译错误: User-defined type not defined

    excel - 如何使用 AppleScript 保存为 excel 文件

    Excel列表功能

    c# - 在 C# 中使用矩阵标准化变换后的图像