Edit Excel Formula Links To Use Environment Variables Instead Of Static Absolute Paths
Sep 30, 2013
Is there a way that formula links in spreadsheets can use environment variables to reference formulas in other spreadsheets/addins?
For example, I have a spreadsheet that imports templates which call functions in an addin. The spreadsheet, templates and the addin could be installed into either the 'Program Files' or the 'Program Files (x86)' folders.
I am experiencing issues with the formula references when moved between 32 and 64 bit computers since Excel seems to store the full path of the addin in the Excel formula (even though it hides it when the reference resolves its path) in my templates. I would like to update the references in my templates so that they use an environment variable (set by my software installer) to always know the correct path of the addin.
In Excel 2003, spreadsheet links are edited via: 'Edit'->'Links'
In Excel 2007 and higher,'Data'->'Edit Links'
I have inherited an excel document that has dashboards, data pages and pivot tables. There is macro and links within this but I can not view the macros at all. When trying to update the links ( using break,update, change) it appears to work ( changes to OK) but the location field on bottom of edit links page NEVER goes to new location and the MANUAL button is greyed out. I need to be able to update this master file tomorrow with the multiple excel sheets I will get but do not know how to do it if can not update links proeprly or even be able to view the macro
I have written some VBA code that is functional, but yields a formula that is somewhat confusing to the user.
I have two string variables called TippityTop and Anchor, both of which refer to specific cell addresses in the R1C1 style.
I attempted to define other variables that reference cells that are offset from TippityTop and Anchor without using the ActiveCell route. Try as I might, I could not produce the cell addresses that I wanted these new variables to reference.
I consulted many Excel Help screens and referred to a book on Excel VBA, but I finally took another route.
I now have:
ActiveCell.FormulaR1C1 = _ "=IF(AND(ISNA(MATCH(RC[-2],OFFSET(" & TippityTop & ",1,-2):OFFSET(" & Anchor & ",-2,-2),0)>0),ROUND(RC[-1],2)0),""DOV not in Treasury"","""")"
The problem is that this code yields this formula in Excel:
=IF(AND(ISNA(MATCH(L587,OFFSET($H$585,1,-2):OFFSET($H$798,-2,-2),0)>0),ROUND(M587,2)0),"DOV not in Treasury","")
Rather than OFFSET($H$585,1,-2):OFFSET($H$798,-2,-2), I would like the formula to say F586:F796, so that the end user can easily understand the logic.
I have an unwanted link and I can't remove it. I have tried through the Edit Links dialog box, searched for [ in formulas throughout the workbook and gone searching manually for the reference but to no avail.
1. Are the Workbook Environment and the VBE environment simply two different forms? Meaning, when I press alt+F11, am I just switching between 2 default forms?
2. Is Excel itself written in VBA? And if it's written in VB or C, which would make more sense, is the GUI side of things written in VBA?
The reason I ask is pretty simple. I really love the way the Workbook environment and the VBE environment are set up. I want to use them as models for my own forms. Both environments seem little more than two very complex forms. And I want to replicate so much about them.
3. But is it possible to replicate anything I see as part of these environments in my own forms?
For instance, what is the VBE Project window? Is it a ListBox? I need to code a form that does something very similar to the way it groups and collapses Projects and their sub-groups like Microsoft Objects, Sheets, ThisWorkbook, etc. I've used grouping to make rows and columns collapsible. But never items in a ListBox... But am I right to assume that I can do so, just because Excel's environment does it? Meaning, can it be assumed that anything I see Excel doing itself, a talented programmer can replicate in forms of his own?
Is it possible to update external links on a worksheet via running a macro? I have a worksheet where some cells have external links to other files, and every month I have to scroll through and do the typing in order to have everything up and running. A typical cell has formulas like =[E:ReportsAug-2007.xls]Data!F25 Another cell =[E:ReportsAug-2007.xls]Data!F43 and so on.
Every new month I actually have to replace all [E:ReportsAug-2007.xls] occurrences with for example [E:ReportsSep-2007.xls]. So, is it possible to have a macro which opens a textbox of which i can type the new month 'Sep', so that when the macro runs I save all the typing?
I was wondering if it is possible to update links from one worksheet to another that contains a running tally - even when another worksheet is added and needs to be linked to the running tally as well?
I have attached a sample workbook. What I have is a summary sheet ( Sum Hrs CMS) that has SUMIF calculations for a series of rows in the Estimate Sheet.
The problem that I have run into is - when you press the Add New Sheet button on the Estimate sheet, it copies hidden sheet and inserts it at the end of the workbook, however I then need the hours in the CMS portion to link to the summary sheet. What I was wondering is how do the links on the 'Sum Hrs CMS' sheet include this new sheet and the data that is entered on it?
I have a spreadsheet with a real-time data link in cell A1 and I use Worksheet Calculate() to paste the new value, on any update,below cell A1. Once I have 10 values from A2 down to A11, I over-write the first one, so that I have the 10 most recent. From this I calculate the moving average.
Anyway, I would like to be able to do this without the pasting bit ie storing the most recent ten data points in a variable say x(i) and just averaging x(1) to x(10).
I'm guessing I need to use some kind of static variable or array, but I don't really know how to do this.
In the Workook_open Sub I want to define 2 global static Variables. For some reason I can't get it to work. Whenever I try to access these vars they have the value "0" I use Excel 2000.
Here is what i did:
Dim i As Integer Dim ws As Worksheet Public Static GlobalStartX As Integer Public Static GlobalStartY As Integer
I'm trying to set up a macro so that: in column C I will see the current (old) links being used by the workbookin column D I will input the new links I want to use in the workbookthe macro will open all those files in column Dthe macro will then replace the current (old) links with those listed in column D
I have the following so far, but something doesn't seem to be working - it gets as far as opening the first new file but doesn't open any others and doesn't change any links (although I've tested the part to change links separately and this seemed to work ok).
Sub linked_sheets() Dim LinkedBooks As Variant Dim i As Long LinkedBooks = ThisWorkbook.LinkSources() For i = LBound(LinkedBooks) To UBound(LinkedBooks) Cells(i + 3, 3) = LinkedBooks(i)
I have a macro where I try to edit the links after I open the workbook. I used the macro recorder to get the code, and if I use it, it works great. However, when I try to insert some variables in the code, I get an error saying "Method 'ChangeLink' of object'_Workbook' failed. I don't know why I'm getting this error. Below is code.
Sub MyCode
Dim VarianceMonth As Variant VarianceMonth = VarianceReport.cboMonth.ListIndex + 1
I am migrating a bookkeepping spreadsheet from Quattro v12 (c2001) to Excel 2007 and have hit a stone wall over relative 3-D references.
In this workbook each sheet holds data for one month, and this includes some lagging-12-month calculations -- that is, summing a range on a single cell for the preceding 12 sheets (including this one).
Unexpectedly, this formula: =ISUM('201206:201305'!M6)
gives absolute references, even though I put in no dollar signs after the sheet names. This means it gives the wrong answer when copied to the next sheet to start a new month.
I can find no reference at all to converting the above formula from absolute to relative reference.
I'd prefer to edit links with the source workbook open, however I receive this error when I do "A formula in this worksheet contains one or more invalid references." I am able to edit links with the source workbook closed but this takes far too much time to be satisfied with that as the solution. I have used vlookup formulas and the index-match method and they both take about the same amount of time to update. I've separated each worksheet and used the "name manager" add-in and have searched all links for any type of error. I feel like I'm missing something. Is there a way to fix this "invalid reference" error so that I can edit my links with the source workbook open?
I have 10 workbooks which have various calculations and have several links to each other. We use Excel 2003.
For each of these files, I have the following code in the Auto_Open module Range Range(“TodayComp”) is a date taken form a link in another spreadsheet. It is on Column 3, but the row changes every day as more rows are inserted before it
This sub looks at Range(“TodayComp”) and checks the date on the cell directly above.
If say Range(“TodayComp”) is 6/25/2008, and the cell above is 6/22/2008, it will insert three rows right above Range(“TodayComp”). These rows need to be copied with formulas from the current row above Range(“TodayComp”)
Issue One: The following code works (it copies the rows), but it takes forever to run, as you can see in bold, I copy and paste each cell, instead of the entire row. Is there a way to copy and paste the entire row? Remember that I have only a named range to refer to, no cell address as it changes every time.
Public Sub Auto_open() Update_Dates() End Sub
Public Sub Update_Dates() Dim tdy, prev As Date Dim index, i, j, yr, no_inserts As Integer
Am creating a large medical teaching database on Excel that lists JPEG images (a few hundred) and the file paths for each image into separate Excel columns using a VBA macro.
The JPEG image filenames are numbered in ascending numerical format (i.e 1.jpeg).
I've tried this in formulas (if, if/and, if/vlookup, if/vlookup/and) and I've been trying to write a macro for this (which I'm thinking needs to loop).
Problem: I have a report that is broken into three categories.
Column A includes locations, Column B includes vendors. Across the top, the monthly report is broken into four classifications (trans types), which are then further subdivided by quantity and cost. (Rough estimation is provided below)
Locations Vendor Z53
Z50
Z51
Z52
[code]....
My data comes in sorted by location, and subtotaled by vendor and trans type. So I'll have a row of data that includes:
What I need to do is pull the data for Z53 based on Location & Vendor. So from the data is would read Location 1 & Vendor A and then find them on the report and paste into the appropriate row (in my report Z53 qty is col E and $ is col F).
I was trying to do a macro that within a determined range (finding the first and last instance of Z53) would match location and vendor to the monthly report and paste the values of Qty and $ into the appropriate fields. Below is what I managed to mangle:
Code: Dim Holder1 As Range Dim Holder2 As Range Dim Holder3 As Range Dim Holder4 As Range Dim Found As Range Dim y As Range Dim x As Range Dim Z0 As Range
[code]......
I was originally trying to match from the report to the data and then copy back to the report, but I had the idea of instead taking the location and vendor from the data and finding the match on the report and pasting. That way I wouldn't have to worry about errors (unless a new location was added that was not included on the report - which I think is an easier fix than trying to go the other way, but maybe not).
In my worksheet, I know the last line of my report AND I know how many "reporting segments" (all equidistant and identical) there are in the report based on the last row using the below (which I tested in several reports in messages):
VB: Dim vListEnd As Variant Dim vTaskCount As Double vListEnd = ActiveSheet.Range("A1").Offset(Sheet1.Rows.Count - 1, 0).End(xlUp).Row vTaskCount = ((vListEnd - 5) / 22)
My "reporting segments" are ALWAYS 22 rows each and the first one always starts in row 5. Example: A document where the last row (containing an End of Report special character) is 247 would have 11 reporting segments.
Within each reporting segment, there are two different formulas needed.
For the first reporting segment located in rows A5 thru J27:
I need FORMULA1 in all cells of the range (D5:D15 dragged out to H5:H10(not 15) and D18) and FORMULA2 in cells (F20:F22,J20:J22).
Then I need to repeat that vTaskCount number of times (number of segments) and at intervals of 22 (segment repeater offset). Some reports may have 2 segments, some might have 50, but the structure is always identical.
My formulas are all pretty simple if it makes a difference (originally using FormulaR1C1 = "=RC[-1]+RC[-3]" --- but because I now know solid cell locations I suppose I don't need to make them relative, too.)
I want to add a date into cell Q when adding data into cell N but I also want to ensure that that date remains static, so when the spreadsheet is re-opened the historic date remains. Also, I want to add a date to column E which will remain static. I have entered the formula = TODAY() but when I re-open the spreadsheet I lose the historic date.
I have a formula in column A, =AVERAGE(C2:Z2). I have a macro that moves columns C to Z over one column to the right every day. How do I keep the above formula the same as it is now. At present the range also moves one column. I have added $ but it still changes
I have 2 sheets in a work book. In the first sheet in A27 I have a value. In the secend sheet I have a formula "=SHEET1!$A$27".
Problem is when I insert a new row in sheet 1 the formula in sheet 2 changes to "=SHEET1$A$28" and I want the formula in sheet 2 to stay the same that is, always =SHEET1!$A$27.
Is there a way to make the last two parts ("height" and "width") of the OFFSET statement formula static (meaning they alway refer to the same cell)? I am inputting a different number in the "colum" section of the formula and every time I do...it changes which cells the "height" and "width" refer to.
Here is what I currently have to make the cell blank and highlighted yellow in the event the date in K1 equals the second day of any month
=IF(DAY(K$1)=2,"","N/A")
Conditional formatting is just =DAY(K$1)=2
What I need to do is apply these same conditions to the cell if the date in K1 is equal to 02/10/10 or 04/10/10 or 06/10/10 or 08/10/10 or 10/10/10 or 12/10/10