小编dwi*_*ony的帖子

在运行时隐藏Excel应用程序

我正试图在一个漫长的脚本中隐藏Excel,我在其中进行了一些网络抓取.我能够隐藏应用程序就好了,问题是当我改.Visible回来时True,我还有1-2个额外的应用程序(只是空的Excel shell).我猜其中一个是我的PERSONAL.xlsb工作簿,但我不确定另一个是什么 - 有时我得到一个额外的,有时我得到两个.我可以关闭这些shell文件的唯一方法是EXCEL.EXE通过任务管理器结束进程.

我试图隐藏主窗口(Windows(1))也无济于事(它只隐藏工作簿,而不是应用程序):

Sub Test()

Windows(ThisWorkbook.Name).Visible = False

Application.Wait (Now + TimeValue("0:00:05"))

Windows(ThisWorkbook.Name).Visible = True

End Sub
Run Code Online (Sandbox Code Playgroud)

我怎样才能让我的主工作簿重新出现?

示例代码:

Sub Test()

Application.Visible = False

Application.Wait (Now + TimeValue("0:00:05"))

Application.Visible = True

End Sub
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

编辑:这是在Windows 7,Excel 2016上

Edit2:单独运行Application.Visible = True也给了我这两个幻像应用程序.

编辑3:问题肯定与存储在PERSONAL.xlsb文件中的宏有关- 当我进入一台新计算机并向该工作簿添加新宏时,我可以重现该问题.但是,我仍然不确定如何避免它......

任务管理器:

IMG1

从Filemaker Pro打开Excel的脚本:

Open URL [With dialog:Off; "C:\Users\Username\Desktop\TestFile.xlsm"]

内部TestFile.xlsm:

Private Sub Workbook_Open()

Application.Visible = False

'Refresh a query in the Excel …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

15
推荐指数
1
解决办法
1178
查看次数

将一系列趋势线方程转换为形状文本框

我试图将趋势线方程从我的图表中的第一个系列变为放置在工作表上其他位置的形状文本框 - 但是,当我逐行逐步执行代码时,我只能正确填充文本框 - 在运行期间它没有任何影响:

For Each chtObj In ActiveSheet.ChartObjects

    Set cht = chtObj.Chart

    For Each srs In chtObj.Chart.SeriesCollection
        srs.Trendlines(1).DisplayEquation = True 'Display the labels to get the value
        ThisWorkbook.Worksheets("MyDataSheet").Shapes(slopetextboxes(k)).TextFrame.Characters.Text = srs.Trendlines(1).DataLabel.Text
        srs.Trendlines(1).DisplayEquation = False 'Turn it back off
        Exit For
    Next srs

    k = k + 1 ' for the slope textboxes

Next chtObj
Run Code Online (Sandbox Code Playgroud)

请注意,这slopetextboxes是一个包含~6个形状文本框名称的数组.

据我所知,没有办法获取趋势线数据标签而无法停止显示它.我先尝试将它存放在一个字符串中DoEvents,然后Application.ScreenUpdating重新打开,一切都无济于事.我在这里难过.

编辑:看来,通过放置DoEvents.DisplayEquation = True我能有一些我的形状填充正确,但不是全部.仍然似乎是某种运行时问题.

BOUNTY EDIT:我已经开始用数据本身的公式抓住斜坡,但我仍然不明白为什么我不能.DataLabel.Text在运行期间抓住图表.我可以在踩踏时抓住它,而不是在运行时.看起来只是采用PREVIOUS系列斜率并将其放置在形状中(或者单元格,它甚至不在目的地的哪个位置). …

excel vba excel-vba

7
推荐指数
1
解决办法
639
查看次数

循环遍历变量数组时是否不能将If语句与多个条件(AND / OR)一起使用?

背景:

在使用某些变体数组将数据根据条件分类到多个位置时,我注意到每次使用if语句将多个条件标记为false。这是用来创建字典的,尽管它从未涉及字典方面,因为仅在变量数组中循环时,响应错误。

我将它们移到两个单独的if语句中,并且一切正常。


题:

为什么在遍历变量数组中的数据时无法使用多条件if语句?


有问题的代码:

生成变体数组的通用代码:

Public ex_arr As Variant, ex_lr As Long, ex_lc As Long
Public dc As Scripting.Dictionary 

Private Sub capture_export_array()
    With Sheets("export")
        ex_lc = .Cells(1, .Columns.Count).End(xlToLeft).Column
        ex_lr = .Cells(.Rows.Count, ex_lc).End(xlUp).Row
        ex_arr = .Range(.Cells(1, 1), .Cells(ex_lr, ex_lc)).Value
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

导致False条件的代码(立即窗口打印= 0):

Private Sub find_unique_items()
    Set dc = New Scripting.Dictionary
    Dim i As Long
    For i = LBound(ex_arr) To UBound(ex_arr)
        If InStr(ex_arr(i, ex_lc), "CriteriaA") And InStr(ex_arr(i, 4), "CriteriaB") Then dc(ex_arr(i, 2)) = ex_arr(i, 3) …
Run Code Online (Sandbox Code Playgroud)

excel vba loops if-statement variant-array

6
推荐指数
1
解决办法
100
查看次数

VBA随机数以规则的间隔产生重复序列

该代码应该在VBA中生成10,000个随机数的序列.出于某种原因,我只能生成一个长度为5842的独特序列,然后重复.但是,这是最奇怪的部分,每次运行代码时,序列都会在不同的地方开始.例如,在一次运行中,元素2660之后的元素与元素8502之后的元素相同(8502-2660 = 5842).下一次运行,我得到一个重复以下元素3704和9546(9546-3704 = 5842)的序列.等等.

Function NormRand() As Double
' NormRand returns a randomly distributed drawing from a
' standard normal distribution i.e. one with:
' Average = 0 and Standard Deviation = 1.0
Dim fac As Double, rsq As Double, v1 As Double, v2 As Double
Static flag As Boolean, gset As Double

' Each pass through the calculation of the routine produces
'  two normally-distributed deviates, so we only need to do
'  the calculations every other call. …
Run Code Online (Sandbox Code Playgroud)

random ms-access vba

5
推荐指数
1
解决办法
192
查看次数

从结构的向量中,获取一个向量,该向量收集每个结构的一个字段

假设我有以下结构:

struct Point {
    double X,Y,Z;
};
Run Code Online (Sandbox Code Playgroud)

和以下向量:

std::vector<Point> v;
// populate v with random points
Run Code Online (Sandbox Code Playgroud)

现在,我想调用类似的东西collect(v, X)并获取std::vector包含X原始结构向量中的值的内容,例如:

v.push_back(Point{1.0, 2.0,  3.0});
v.push_back(Point{1.1, 0.0, -0.5});
auto ans = collect(v,X);
// ans = [1.0, 1.1]
Run Code Online (Sandbox Code Playgroud)

我认为这是一个非常常见的任务,我确信这个名字很好,我在问的时候无法想出(随意指出我!).

我可以做这个:

std::vector<double> collectX(std::vector<Point> v) {
    std::vector<double> output;
    for (auto elem : v) {
        output.push_back(elem.X);
    }
}
/* Repeat for each field the struct Point has... */
Run Code Online (Sandbox Code Playgroud)

我知道C++没有反思.我想知道是否有解决方法?正如您可能想象的那样,我正在使用的结构不只有3个字段,因此为每个字段编写方法有点令人生畏和不优雅.

c++

5
推荐指数
2
解决办法
182
查看次数

选择excel中包含特定列中相同值的所有行

我是Stack Overflow和VBA的新手.我尝试编写一些小的VBA代码来选择包含特定数字的Excel中的所有行(从A到E).

(部分)我的代码到目前为止

Dim ploeg as range
Dim ploeg2 as range

For v = 1 To 100
If Cells(v, 6) = 1 Then 
Set ploeg = Range(Cells(v, 1), Cells(v, 5))
Set ploeg2 = Union(ploeg2, ploeg)
End if
Next v

Ploeg2.Select
Run Code Online (Sandbox Code Playgroud)

但这不起作用......

有人能帮助我吗?

excel vba excel-vba

4
推荐指数
1
解决办法
685
查看次数

这些和函数之间的可靠性是否存在差异?

所以有一天我得到了一些奇怪的总和值,我完全被难倒了.我放弃在VBA中使用sum函数,只是添加了很长的值(通过循环),但后来我在某处读到使用VBA中的sum函数对于开发人员来说并不总是可靠的?(我找不到帖子了,但我还在寻找它).

有没有道理呢?我知道很多人有不同的方法可以从一系列细胞中获得总和 - 而不是过于自以为是,哪一个会返回最准确的结果?

Sub testsums()

Dim metric1 As Integer, metric2 As Integer, metric3 As Integer

metric1 = Application.Sum(Range(("A1"), ("Z1")))

metric2 = Application.WorksheetFunction.Sum(Range(("A1"), ("Z1")))

metric3 = WorksheetFunction.Sum(Range(("A1"), ("Z1")))

End Sub
Run Code Online (Sandbox Code Playgroud)

我正在努力重现我的错误 - 基本上当循环通过许多行(15,000+)并获得总和时,有些人会返回零,而不应该这样.

excel vba excel-vba

2
推荐指数
1
解决办法
58
查看次数

在Excel中创建序列列

我有一个名称列,我想添加一个列,根据名称计算每行的顺序.因此,如果名称出现多次(即4),则该名称的第一行将包含序列1,第二行将包含序列2,等等...

Name        Sequence    
Andrew       1    
Andrew       2    
Andrew       3    
Paul         1    
Amy          1    
Amy          2    
Jean         1
Run Code Online (Sandbox Code Playgroud)

excel excel-formula

2
推荐指数
1
解决办法
42
查看次数

Excel VBA-具有特定值的For Loop

我正在尝试创建一个仅选择一些值但无法计算语法的For循环,或者甚至可以吗?

我希望它像

Dim i As Integer
For i = 1,3,8,15 Then
Do something
Next i
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

excel vba for-loop excel-vba

1
推荐指数
2
解决办法
4224
查看次数

程序太大vba for excel

我不习惯编写代码.我通常通过宏生成我的代码,我正面临这个问题.有人可以帮帮我吗?

Sub Test()

    Dim WorkRng As Range
    Dim Rng As Range
    Dim xOffsetColumn As Integer

    Set WorkRng = Intersect(Application.ActiveSheet.Range("B8:B38"), Target)
    xOffsetColumn = 19

    If Not WorkRng Is Nothing Then
        Application.EnableEvents = False

        For Each Rng In WorkRng
            If Not VBA.IsEmpty(Rng.Value) Then
                Rng.Offset(0, xOffsetColumn).Value = Now
                Rng.Offset(0, xOffsetColumn).NumberFormat = "mm/dd/yyyy, hh:mm:ss"
            Else
                Rng.Offset(0, xOffsetColumn).ClearContents
            End If
        Next

        Application.EnableEvents = True
    End If

    Dim WorkRng1 As Range
    Dim Rng1 As Range
    Dim xOffsetColumn1 As Integer

    Set WorkRng1 = Intersect(Application.ActiveSheet.Range("C8:C38"), Target)
    xOffsetColumn1 = …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

1
推荐指数
1
解决办法
960
查看次数

向后(从下到上)VBA遍历数组

我创建了一个数组,其中每个元素都是我要从工作表中删除的行数。

唯一的问题是,从工作表顶部删除行会转移其他行的位置。因此,请建议如何从底部到顶部(向后)循环遍历阵列。

(...)
For Each r In rowArray()

    Cells(r, 5).Rows.EntireRow.Delete

Next r
(...)
Run Code Online (Sandbox Code Playgroud)

arrays vba loops for-loop

1
推荐指数
1
解决办法
99
查看次数