我正试图在一个漫长的脚本中隐藏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文件中的宏有关- 当我进入一台新计算机并向该工作簿添加新宏时,我可以重现该问题.但是,我仍然不确定如何避免它......
任务管理器:
从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) 我试图将趋势线方程从我的图表中的第一个系列变为放置在工作表上其他位置的形状文本框 - 但是,当我逐行逐步执行代码时,我只能正确填充文本框 - 在运行期间它没有任何影响:
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系列斜率并将其放置在形状中(或者单元格,它甚至不在目的地的哪个位置). …
背景:
在使用某些变体数组将数据根据条件分类到多个位置时,我注意到每次使用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) 该代码应该在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) 假设我有以下结构:
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个字段,因此为每个字段编写方法有点令人生畏和不优雅.
我是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)
但这不起作用......
有人能帮助我吗?
所以有一天我得到了一些奇怪的总和值,我完全被难倒了.我放弃在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+)并获得总和时,有些人会返回零,而不应该这样.
我有一个名称列,我想添加一个列,根据名称计算每行的顺序.因此,如果名称出现多次(即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) 我正在尝试创建一个仅选择一些值但无法计算语法的For循环,或者甚至可以吗?
我希望它像
Dim i As Integer
For i = 1,3,8,15 Then
Do something
Next i
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我不习惯编写代码.我通常通过宏生成我的代码,我正面临这个问题.有人可以帮帮我吗?
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) 我创建了一个数组,其中每个元素都是我要从工作表中删除的行数。
唯一的问题是,从工作表顶部删除行会转移其他行的位置。因此,请建议如何从底部到顶部(向后)循环遍历阵列。
(...)
For Each r In rowArray()
Cells(r, 5).Rows.EntireRow.Delete
Next r
(...)
Run Code Online (Sandbox Code Playgroud)